package com.zx.service.goods.impl;

import com.zx.dao.goods.GoodsCategoryMapper;
import com.zx.dao.goods.GoodsImgMapper;
import com.zx.dto.request.goods.GoodsRequestDto;
import com.zx.dto.response.goods.GoodsDto;
import com.zx.dto.response.goods.GoodsImgDto;
import com.zx.enums.GoodsImgTypeEnums;
import com.zx.service.goods.GategoryGoodsService;
import com.zx.util.Page;
import com.zx.util.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author sunkai
 * @date 2022/8/4 0004 16:46
 * @mood zhou xun
 */
@Service
public class GategoryGoodsServiceImpl implements GategoryGoodsService {
    @Autowired
    private GoodsCategoryMapper goodsCategoryMapper;
    @Autowired
    private GoodsImgMapper goodsImgMapper;

    private static Map<Integer, GoodsDto> MAP = new HashMap<>();

    @Override
    public List<GoodsDto> queryGood(GoodsRequestDto goodsRequestDto) {
        goodsRequestDto = pageFormat(goodsRequestDto);
        List<GoodsDto> goodsDtos = goodsCategoryMapper.queryGood(goodsRequestDto);
        return goodImg(goodsDtos);
    }

    //查找商品对应的图片
    private List<GoodsDto> goodImg(List<GoodsDto> goodsDtos) {
        MAP = goodsDtos.stream().collect(Collectors.toMap(GoodsDto::getId, a -> a, (k1, k2) -> k1));
        List<Integer> goodsId = goodsDtos.stream().map(GoodsDto -> GoodsDto.getId()).collect(Collectors.toList());
      /*  for (GoodsDto item : goodsDtos) {
            MAP.put(item.getId(), item);
            goodsId.add(item.getId());
        }*/
        //查询图片封面
        List<GoodsImgDto> goodsImgDtoList = goodsImgMapper.queryList(goodsId, GoodsImgTypeEnums.COVER.getType());
        if (!CollectionUtils.isEmpty(goodsImgDtoList)) {
            for (GoodsImgDto goodsImgDto : goodsImgDtoList) {
                GoodsDto goodsDto = MAP.get(goodsImgDto.getGoodsId());
                if (CollectionUtils.isEmpty(goodsDto.getGoodsImgDtoList())) {
                    goodsDto.setGoodsImgDtoList(new ArrayList<>());
                }
                goodsDto.getGoodsImgDtoList().add(goodsImgDto);
            }
        }
        return goodsDtos;
    }

    // 进行分页转换
    private GoodsRequestDto pageFormat(GoodsRequestDto goodsRequestDto) {
        goodsRequestDto.setTotalRows(sum(goodsRequestDto));
        if (goodsRequestDto.getTotalRows() <= 0) {
            return null;
        }
        //当前页
        goodsRequestDto.setPageIndex(
                PageUtil.pageNumber(goodsRequestDto.getPageIndex(), goodsRequestDto.getPageSize()));
        //总页数
        goodsRequestDto.setTotalPage(
                PageUtil.totalPage(goodsRequestDto.getTotalRows(), goodsRequestDto.getPageSize()));
        //总行数
        return goodsRequestDto;
    }

    @Override
    public int sum(GoodsRequestDto goodsRequestDto) {
        return goodsCategoryMapper.sum(goodsRequestDto);
    }


   /* @Override
    public List<GoodsDto> SalesOrder(GoodsRequestDto goodsRequestDto) {
        //显示位置
        goodsRequestDto.setPageIndex(
                PageUtil.pageNumber(goodsRequestDto.getPageIndex(), goodsRequestDto.getPageSize()));
        //总行数
        goodsRequestDto.setTotalRows(sum(goodsRequestDto));
        //总页数
        goodsRequestDto.setTotalPage(
                PageUtil.totalPage(goodsRequestDto.getTotalRows(),goodsRequestDto.getPageSize()));
        if (ObjectUtils.isEmpty(goodsRequestDto.getTotalPage())){
            return new ArrayList<>();
        }
        List<GoodsDto> goodsDtos = goodsCategoryMapper.SalesOrder(goodsRequestDto);
        List<Integer> goodsId=new ArrayList<>();
        for(GoodsDto goodsDtoList:goodsDtos){
            MAP.put(goodsDtoList.getId(),goodsDtoList);
            goodsId.add(goodsDtoList.getId());
        }
        //查询图片封面
        List<GoodsImgDto> goodsImgDtoList = goodsImgMapper.queryList(goodsId, GoodsImgTypeEnums.COVER.getType());
        for (GoodsImgDto goodsImgDto:goodsImgDtoList) {
            GoodsDto goodsDto = MAP.get(goodsImgDto.getGoodsId());
            if (CollectionUtils.isEmpty(goodsDto.getGoodsImgDtoList())) {
                goodsDto.setGoodsImgDtoList(new ArrayList<>());
            }
            goodsDto.getGoodsImgDtoList().add(goodsImgDto);
        }
        return goodsDtos;
    }*/

}
